package com.example.spring.bean.load06imports.import3;

import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;

/**
 * ImportBeanDefinitionRegistrar
 * <p> 把registerBeanDefinition放出来，这个方法是spring创建容器时，实例化对象的方法，现在供我们手动注入
 * <p> 可以根据自己的需要，或者根据条件，有目的的注入bean
 */
public class CustomImportBean implements ImportBeanDefinitionRegistrar {

    /**
     * 初始化过程中动态地添加或修改 Bean 定义
     */
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        //if条件等

        //对于我们要注册的bean, 给bean进行封装，可以指定Scope
        RootBeanDefinition beanDefinition = new RootBeanDefinition(TestDao3.class);

        //注入一个bean，跟进方法就会发现，put进了一个大的map
        registry.registerBeanDefinition("testDao", beanDefinition);

    }
}
